package wodegua.d32_期末考试真题.demo2;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 第二题(10)
 * 需求
 * 。某个班级组织团建活动，班长给出了几个去处给大家选择，分别是“农家乐”，“轰趴"，"野外拓展"，"健身房”，本次活动每个学生是可以多选的。
 * 。现在有如下5名学生选择了如下去处。
 *
 * 张全蛋儿 农家乐,野外拓展
 * 李二狗子 轰趴,野外拓展,健身房
 * 翠花 野外拓展
 * 小帅 轰趴，健身房
 * 有容 农家乐
 *
 * 具体的功能点如下:
 * 1、请找出每个去处想去的人数是多少，并输出投票最多的去处是哪个。
 * 2、请找出哪些人没有选择投票最多的去处，输出他们的名字。(本案例用不用stream流做都给分)，比如:小帅，有容没有选择野外拓展，
 */
public class Test {
    public static void main(String[] args) {
        Map<String,List<String>> users = new HashMap<>();
        users.put("张全蛋儿", Arrays.asList("轰趴,农家乐,野外拓展".split(",")));
        users.put("李二狗子", Arrays.asList("轰趴,野外拓展,健身房".split(",")));
        users.put("翠花", Arrays.asList("野外拓展".split(",")));
        users.put("小帅", Arrays.asList("健身房".split(",")));
        users.put("有容", Arrays.asList("农家乐".split(",")));
        System.out.println("每个人选的去处");
        System.out.println(users);
        System.out.println("--------------------------");

        //1、请找出每个去处想去的人数是多少，并输出投票最多的去处是哪个。
        Map<String,Integer> qc = new HashMap<>();
        users.forEach((name,data) -> {
            for (String datum : data) {
                qc.put(datum, qc.containsKey(datum) ? qc.get(datum) + 1 : 1);
            }
        });
        System.out.println("去处统计");
        System.out.println(qc);
        System.out.println("--------------------------");

        Integer maxCount = qc.entrySet().stream().max((Comparator.comparingInt(Map.Entry::getValue))).get().getValue();
        List<String> names = qc.entrySet().stream().filter(d-> d.getValue() == maxCount).map(Map.Entry::getKey).collect(Collectors.toList());
        System.out.println("最多的去处");
        System.out.println(names);
        System.out.println("--------------------------");

        //2、请找出哪些人没有选择投票最多的去处，输出他们的名字。(本案例用不用stream流做都给分)，比如:小帅，有容没有选择野外拓展，
        System.out.println("没有选择最多的去处");
        users.forEach((key, value) -> {
            boolean flag = true;
            for (String s : value) {
                if (names.contains(s)) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                System.out.println(key);
            }
        });
        System.out.println("--------------------------");
    }
}
